package com.cskaoyan.javase.oop1._8anonymous;

/**
 * @description: 匿名对象
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 匿名: 指的是没有名字
 * 匿名对象: 没有名字的对象,指的是没有引用指向它的对象,称之为匿名对象
 * 匿名对象的创建语法:
 *      new 类名(参数)
 * 然后不要用引用指向它,以上就创建了一个匿名对象
 *
 * 匿名对象的作用:
 *      1.没有引用指向的对象,创建之后如果不使用,
 *          那么它们就不能再使用,所以匿名对象创建出来之后,必须直接使用
 *          new 类名(参数).(成员变量/方法)
 *      2.匿名对象经常用来作为方法的返回值,方法的实参
 *          注: 如果方法的返回值类型和形参的类型写了一个类名,表示需要一个对应类型的对象
 *
 * 匿名对象的优缺点:
 * 优点:
 *      1.简单,偷懒的写法,代码写得少(这一条就足够了)
 *      2.没有引用指向的对象是垃圾对象,理论上来说,它会更快的被GC回收,空间利用率更高(这是自己想的)
 *缺点:
 *      1.只能用一次,是一次性的
 *
 * 综上,匿名对象在明确知道一个对象只会用一次时,可以使用.相反,如果一个对象需要频繁使用,创建匿名对象就得不偿失了
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建Tiger类的匿名对象
        /*Tiger tiger = new Tiger();
        tigerShout(tiger);*/
        //上述步骤二合一
        tigerShout(new Tiger());

    }

    public static void tigerShout(Tiger tiger){
        tiger.shout();
    }

    public static Tiger test(){
        /*Tiger tiger = new Tiger();
        return tiger;*/
        //上述步骤二合一
        return new Tiger();
    }
}

class Tiger {
    public void shout() {
        System.out.println("嗷嗷叫!");
    }
}